home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 06 - 1990 / 06.10 Oct 90 / NewToolBox.π / NewToolBox.Lib / LCntrl.Asm next >
Encoding:
Assembly Source File  |  1989-09-07  |  5.1 KB  |  177 lines  |  [TEXT/KAHL]

  1. ;******************************************
  2. ;*     CONTROL      M A N A G E R            *
  3. ;******************************************
  4.  
  5. INCLUDE Library.Txt
  6.  
  7. ;-------------------------------
  8. ; ***   External Definition  ***
  9. ;-------------------------------   
  10.  
  11. XDEF InstalControl
  12. XDEF ExecControl
  13. XDEF HiliteAllControls  
  14.  
  15. ;-------------------------------
  16. ; Control Record
  17. ;------------------------------- 
  18.  
  19. ;ControlRecord = Record  { 41 bytes}
  20. ;{  0}   nextControl : ControlHandle
  21. ;{  4}   contrlOwner : GrafPtr
  22. ;{  8}    contrlRect : Rect
  23. ;{ 16}     contrlVis : Byte
  24. ;{ 17}  contrlHilite : Byte
  25. ;{ 18}   contrlValue : INTEGER
  26. ;{ 20}     contrlMin : INTEGER
  27. ;{ 22}     contrlMax : INTEGER
  28. ;{ 24} contrlDefProc : DEFfunHandle
  29. ;{ 28}    contrlData : Handle
  30. ;{ 32}  contrlAction : ProcPtr
  31. ;{ 36}   contrlrfCon : LongInt
  32. ;{ 40}   contrlTitle : String
  33.  
  34. ;-------------------------------
  35. ; Control AuxRecord
  36. ;-------------------------------
  37.  
  38. ;ControlAuxRecord = Record  { 6 bytes}
  39. ;{  0}   contrlID     : INTEGER
  40. ;{  2}   contrlProc : ProcPtr
  41.     
  42. ;------------------------------------------------------------------------------
  43. ;FUNCTION InstalControl( cntrlID:INTEGER;cntrlProc:ProcPtr;
  44. ;                         whichWindow:WindowPtr);INTEGER;
  45. ;------------------------------------------------------------------------------     
  46.  
  47. ;-------------------------------
  48. ; Parameters
  49. ;-------------------------------
  50.  
  51. cntrlProc        EQU 12
  52. cntrlID          EQU 16
  53. whichWindow      EQU 8
  54.  
  55. ;-------------------------------
  56. ; Local Variables
  57. ;-------------------------------
  58.  
  59. error         EQU -2
  60. newContrl      EQU -6
  61.  
  62. ;-------------------------------
  63.  
  64. InstalControl
  65.     LINK A6,#-6               ;
  66.     MOVEM.L A2-A4/D3-D7,-(SP) ;
  67.     MOVE.W #noErr,error(A6)   ;
  68.     SUBQ.L #4,SP              ;
  69.     MOVE.W cntrlID(A6),-(SP)   ;the control ID
  70.     MOVE.L whichWindow(A6),-(SP) ;
  71.     _GetNewControl              ;get it from 
  72.     MOVE.L (SP)+,A3             ;resource file
  73.     MOVE.L A3,newContrl(A6)        ;
  74.     MOVE.W #nilHandleErr,error(A6);
  75.     CMPA.L #NIL,A3                ;can't get it ?
  76.     BEQ @0                      ;go @0
  77.     MOVEQ #SizeCtrlAuxRec,D0    ;create a new
  78.     _NewHandle                  ;Cntl AuxRec
  79.     BNE @1                        ;if we can't, go @1
  80.     MOVE.L newContrl(A6),A3        ;
  81.     MOVE.L (A3),A3                ;
  82.     MOVE.L A0,contrlrfCon(A3)    ;we replace the 
  83.     MOVE.L (A0),A0                ;cntl refcon with
  84.     MOVE.W cntrlID(A6),contrlID(A0) ;our AuxRec
  85.     MOVE.L cntrlProc(A6),contrlProc(A0) ;and we save
  86.     MOVE.W #noErr,error(A6)     ;in it the cntl ID
  87.     BRA @0                        ;and the Cntlproc
  88. @1    
  89.     MOVE.L newContrl(A6),-(SP)    ;
  90.     _DisposControl                ;
  91. @0
  92.     MOVE.W error(A6),D0         ;
  93.     MOVEM.L (SP)+,A2-A4/D3-D7   ;
  94.     UNLK A6                     ;
  95.     MOVE.L (SP)+,A0             ;
  96.     ADD.L #10,SP                ;
  97.     MOVE.W D0,(SP)              ;
  98.     JMP (A0)                    ;  
  99.     
  100. ;------------------------------------------------------------------------------
  101. ;PROCEDURE ExecControl(theControl:ControlHandle);
  102. ;------------------------------------------------------------------------------  
  103.  
  104. ;-------------------------------
  105. ; Parameters
  106. ;-------------------------------
  107.  
  108. theControl        EQU 8
  109.  
  110. ;-------------------------------
  111.  
  112. ExecControl
  113.     LINK A6,#0                      ;
  114.     MOVEM.L A2-A4/D3-D7,-(SP)       ;
  115.     MOVE.L theControl(A6),A1        ;
  116.     MOVE.L (A1),A1                  ;
  117.     MOVEA.L contrlrfCon(A1),A1      ;
  118.     CMPA.L #NIL,A1                  ;
  119.     BEQ @0                           ; 
  120.     MOVEA.L (A1),A1                 ;
  121.     MOVEA.L contrlProc(A1),A1        ;we run the 
  122.     MOVE.L theControl(A6),-(SP)     ;cntlProc (if one)                
  123.     JSR (A1)                        ;and we return  
  124. @0                                   ;
  125.     MOVEM.L (SP)+,A2-A4/D3-D7       ;
  126.     UNLK A6                         ;
  127.     MOVE.L (SP)+,A0                 ;
  128.     ADD.L #4,SP                     ;
  129.     JMP (A0)                        ;  
  130.  
  131. ;------------------------------------------------------------------------------
  132. ;PROCEDURE HiliteAllControls(HiliteState:INTEGER;whichWindow:WindowPtr);
  133. ;------------------------------------------------------------------------------  
  134.  
  135. ;-------------------------------
  136. ; Parameters
  137. ;-------------------------------
  138.  
  139. HiliteState        EQU  12
  140.  
  141. ;-------------------------------
  142. ; Local Variables
  143. ;-------------------------------
  144.  
  145. CntrlHdl            EQU -4
  146.  
  147. ;-------------------------------
  148.  
  149. HiliteAllControls
  150.     LINK A6,#-4                     ;
  151.     MOVEM.L A2-A4/D3-D7,-(SP)       ;
  152.     MOVE.L whichWindow(A6),A1       ;    
  153.     MOVE.L wControlList(A1),A3      ;
  154.     CMPA.L #NIL,A3                  ;
  155.     BEQ @0                           ;
  156. @1  
  157.     MOVE.L A3,CntrlHdl(A6)            ;
  158.     MOVE.L (A3),A3                    ;
  159.     CMPI.L #-1,contrlrfCon(A3)        ;
  160.     BEQ @2                            ;
  161.     MOVE.L CntrlHdl(A6),-(SP)        ;
  162.     MOVE.W HiliteState(A6),-(SP)    ; 
  163.     _HiliteControl                  ;
  164. @2
  165.     MOVE.L CntrlHdl(A6),A3            ;
  166.     MOVEA.L (A3),A3                 ;
  167.     MOVE.L nextControl(A3),A3       ;
  168.     CMPA.L #NIL,A3                  ;
  169.     BNE @1                           ;
  170. @0   
  171.     MOVEM.L (SP)+,A2-A4/D3-D7       ;
  172.     UNLK A6                         ;
  173.     MOVE.L (SP)+,A0                 ;
  174.     ADD.L #6,SP                     ;
  175.     JMP (A0)                        ;  
  176.     
  177. END